"""
_patterns.py — Compiled pattern constants for UsernameChecker.

Extracted from checker.py to keep the main module focused on logic only.
"""
from __future__ import annotations

import re

# ---------------------------------------------------------------------------
# False-Positive Indicators — strings that indicate a profile does NOT exist
# ---------------------------------------------------------------------------
FALSE_POSITIVE_PHRASES: list[str] = [
    # English
    "user not found", "page not found", "profile not found", "account not found",
    "no results found", "0 results found", "no such user", "does not exist",
    "doesn't exist", "not exist", "could not be found", "has been removed",
    "has been deleted", "has been suspended", "has been banned", "account suspended",
    "account disabled", "account deactivated", "nothing here", "content unavailable",
    "we couldn't find", "no matching user", "member not found", "invalid username",
    "username not found", "no profile found", "user is not registered", "error 404",
    "this user hasn't", "this user has not", "no account", "profile is not available",
    "user unavailable", "account unavailable", "profile unavailable",
    "user missing", "account missing", "profile missing",
    "no such account", "no such profile", "user does not exist",
    "account does not exist", "profile does not exist",
    "user cannot be found", "account cannot be found",
    "user was deleted", "account was deleted",
    "user removed", "account removed",
    "user suspended", "user banned", "account banned",
    "user deactivated", "account deactivated",
    "user invalid", "account invalid", "profile invalid",
    "user lookup failed", "profile lookup failed",
    "page unavailable", "page missing", "page removed",
    "resource not found", "requested user not found",
    "requested page not found", "requested profile not found",
    "The specified member cannot be found",
    "Page not found", "404 Not Found",
    "Sorry, we couldn't find what you were looking for.",
    "this profile does not exist",
    "the account you're looking for is not available",
    "no such profile exists", "username does not exist", "could not find the user",
    "the page has been removed or does not exist",
    "account has been deleted by the owner",
    "this user is not on the platform", "no matching results for this user",
    "profile has been suspended", "the requested account cannot be found",
    "404 - profile not found", "we couldn't locate this profile",
    "this account has been terminated", "no user found matching your search",
    "the member has been removed", "page not found for this username",
    "account is no longer active", "this profile is unavailable",
    "couldn't find any account with that name",
    "the user has been banned from the platform",
    "no records found for this profile", "this page does not exist anymore",
    "invalid or non-existent user", "account lookup failed - user not found",
    "the profile you requested has been deleted",
    "no active account associated with this username",
    "we are sorry, but this user does not exist",
    "the specified user cannot be found",
    "profile not found in our database", "this account has been closed permanently",
    "user data could not be retrieved", "no such user on our servers",
    "the page is missing or has been taken down",
    "account has been deactivated and is not viewable",
    "could not retrieve the requested profile",
    "this username is not registered or has been removed",
    "no results found for the user query", "the member account is not available",
    "page unavailable - user not found",
    "this content is no longer available due to account deletion",
    "the user profile has been archived",
    "no account found with the provided details",
    "oops! the profile does not exist",
    "we couldn't find what you were looking for - user",
    "the account has been purged from the system",
    "profile cannot be accessed at this time",
    "no user with that username exists",
    "the requested page is not found or deleted",
    "account has been removed due to violation", "this profile was not found",
    "search returned no matching users",
    "the user you are trying to view does not exist",
    "account not found - please check the username",
    "this page has been deleted by the user",
    "no profile associated with this account",
    "the member cannot be found on the platform",
    "404 error: user profile not found", "we are unable to display this profile",
    "the account is invalid or has been suspended",
    "no data found for this user",
    "user not found in the system", "the profile has been taken down",
    "This account may have been banned or the username is incorrect.",
    "No users matched your search",

    # Russian
    "пользователь не найден", "страница не найдена", "профиль не найден",
    "аккаунт не найден", "ничего не найдено", "результатов не найдено",
    "нет такого пользователя", "не существует", "удалена", "заблокирована",
    "заблокирован", "0 результатов", "нет пользователя", "профиль удален",
    "аккаунт удален", "пользователь удален", "страница удалена",
    "аккаунт заблокирован", "пользователь заблокирован",
    "аккаунт деактивирован", "пользователь деактивирован",
    "профиль недоступен", "страница недоступна",
    "аккаунт недоступен", "пользователь недоступен",
    "ничего не найдено по запросу", "результаты отсутствуют",
    "пользователь отсутствует", "аккаунт отсутствует",
    "не удалось найти пользователя", "не удалось найти профиль",
    "ошибка 404", "ресурс не найден",
    "данные не найдены", "профиль не существует", "Упс",
    "этот профиль не существует", "аккаунт, который вы ищете, недоступен",
    "такого профиля не существует", "имя пользователя не существует",
    "страница удалена или не существует", "аккаунт удалён владельцем",
    "этот пользователь не на платформе",
    "нет совпадающих результатов для этого пользователя",
    "профиль заблокирован", "запрашиваемый аккаунт не может быть найден",
    "404 — профиль не найден", "мы не смогли найти этот профиль",
    "этот аккаунт был прекращён", "пользователь не найден по вашему поиску",
    "участник был удалён", "страница не найдена для этого имени пользователя",
    "аккаунт больше не активен", "этот профиль недоступен",
    "не удалось найти аккаунт с таким именем",
    "пользователь был заблокирован на платформе",
    "нет записей для этого профиля", "эта страница больше не существует",
    "недействительный или несуществующий пользователь",
    "поиск аккаунта не удался — пользователь не найден",
    "профиль, который вы запросили, был удалён",
    "нет активного аккаунта, связанного с этим именем пользователя",
    "мы сожалеем, но этот пользователь не существует",
    "указанный пользователь не может быть найден",
    "профиль не найден в нашей базе данных",
    "этот аккаунт был закрыт навсегда",
    "данные пользователя не удалось получить",
    "такого пользователя нет на наших серверах",
    "страница отсутствует или была удалена",
    "аккаунт деактивирован и недоступен для просмотра",
    "не удалось получить запрошенный профиль",
    "это имя пользователя не зарегистрировано или было удалено",
    "результатов не найдено по запросу пользователя",
    "аккаунт участника недоступен",
    "страница недоступна — пользователь не найден",
    "этот контент больше недоступен из-за удаления аккаунта",
    "профиль пользователя был архивирован",
    "аккаунт не найден по предоставленным данным",
    "упс! профиль не существует",
    "мы не смогли найти то, что вы искали — пользователь",
    "аккаунт был очищен из системы", "профиль невозможно открыть в данный момент",
    "пользователя с таким именем не существует",
    "запрашиваемая страница не найдена или удалена",
    "аккаунт был удалён из-за нарушения", "этот профиль не найден",
    "поиск не вернул совпадающих пользователей",
    "пользователь, которого вы пытаетесь просмотреть, не существует",
    "аккаунт не найден — проверьте имя пользователя",
    "эта страница была удалена пользователем",
    "профиль не связан с этим аккаунтом",
    "участник не может быть найден на платформе",
    "ошибка 404: профиль пользователя не найден",
    "мы не можем отобразить этот профиль",
    "аккаунт недействителен или заблокирован",
    "данные для этого пользователя не найдены",
    "пользователь не найден в системе", "профиль был удалён",
    "Кажется, этой страницы не существует",

    # German
    "benutzer nicht gefunden", "seite nicht gefunden", "profil nicht gefunden",
    "kein benutzer", "keine ergebnisse", "existiert nicht", "nicht gefunden",
    "konto nicht gefunden", "benutzer existiert nicht",
    "dieses profil existiert nicht",
    "das konto, das du suchst, ist nicht verfügbar",
    "ein solches profil existiert nicht", "benutzername existiert nicht",
    "die seite wurde entfernt oder existiert nicht",
    "konto wurde vom besitzer gelöscht",
    "dieser benutzer ist nicht auf der plattform",
    "keine passenden ergebnisse für diesen benutzer",
    "profil wurde gesperrt", "das angeforderte konto konnte nicht gefunden werden",
    "404 - profil nicht gefunden", "wir konnten dieses profil nicht finden",
    "dieses konto wurde beendet",
    "kein benutzer gefunden, der deiner suche entspricht",
    "das mitglied wurde entfernt",
    "seite nicht gefunden für diesen benutzernamen",
    "konto ist nicht mehr aktiv", "dieses profil ist nicht verfügbar",
    "konnte kein konto mit diesem namen finden",
    "der benutzer wurde von der plattform gesperrt",
    "keine einträge für dieses profil gefunden",
    "diese seite existiert nicht mehr",
    "ungültiger oder nicht existierender benutzer",
    "konto-suche fehlgeschlagen - benutzer nicht gefunden",
    "das angeforderte profil wurde gelöscht",
    "kein aktives konto mit diesem benutzernamen verknüpft",
    "wir bedauern, aber dieser benutzer existiert nicht",
    "der angegebene benutzer konnte nicht gefunden werden",
    "profil nicht in unserer datenbank gefunden",
    "dieses konto wurde dauerhaft geschlossen",
    "benutzerdaten konnten nicht abgerufen werden",
    "kein solcher benutzer auf unseren servern",
    "die seite fehlt oder wurde entfernt",
    "konto wurde deaktiviert und ist nicht einsehbar",
    "das angeforderte profil konnte nicht abgerufen werden",
    "dieser benutzername ist nicht registriert oder wurde entfernt",
    "keine ergebnisse für die benutzersuche gefunden",
    "mitgliedskonto ist nicht verfügbar",
    "seite nicht verfügbar - benutzer nicht gefunden",
    "dieser inhalt ist nicht mehr verfügbar wegen konto-löschung",
    "das benutzerprofil wurde archiviert",
    "konto nicht gefunden mit den angegebenen details",
    "ups! das profil existiert nicht",
    "wir konnten nicht finden, wonach du gesucht hast - benutzer",
    "das konto wurde aus dem system entfernt",
    "profil kann derzeit nicht aufgerufen werden",
    "kein benutzer mit diesem benutzernamen existiert",
    "die angeforderte seite wurde nicht gefunden oder gelöscht",
    "konto wurde wegen verstoßes entfernt", "dieses profil wurde nicht gefunden",
    "suche ergab keine passenden benutzer",
    "der benutzer, den du ansehen möchtest, existiert nicht",
    "konto nicht gefunden - bitte benutzernamen überprüfen",
    "diese seite wurde vom benutzer gelöscht",
    "kein profil mit diesem konto verknüpft",
    "das mitglied kann auf der plattform nicht gefunden werden",
    "fehler 404: benutzerprofil nicht gefunden",
    "wir können dieses profil nicht anzeigen",
    "das konto ist ungültig oder gesperrt",
    "keine daten für diesen benutzer gefunden",
    "benutzer nicht im system gefunden", "das profil wurde entfernt",

    # French
    "utilisateur introuvable", "page introuvable", "profil introuvable",
    "utilisateur non trouvé", "aucun résultat", "n'existe pas",
    "compte introuvable", "ce profil n'existe pas",
    "le compte que vous recherchez n'est pas disponible",
    "un tel profil n'existe pas", "nom d'utilisateur inexistant",
    "impossible de trouver l'utilisateur",
    "la page a été supprimée ou n'existe pas",
    "compte supprimé par le propriétaire",
    "cet utilisateur n'est pas sur la plateforme",
    "aucun résultat correspondant pour cet utilisateur",
    "profil suspendu", "le compte demandé est introuvable",
    "404 - profil introuvable", "nous n'avons pas pu localiser ce profil",
    "ce compte a été terminé",
    "aucun utilisateur trouvé correspondant à votre recherche",
    "le membre a été supprimé", "page introuvable pour ce nom d'utilisateur",
    "compte plus actif", "ce profil n'est pas disponible",
    "impossible de trouver un compte avec ce nom",
    "l'utilisateur a été banni de la plateforme",
    "aucun enregistrement trouvé pour ce profil", "cette page n'existe plus",
    "utilisateur invalide ou inexistant",
    "recherche de compte échouée - utilisateur introuvable",
    "le profil demandé a été supprimé",
    "aucun compte actif associé à ce nom d'utilisateur",
    "nous sommes désolés, mais cet utilisateur n'existe pas",
    "l'utilisateur spécifié est introuvable",
    "profil introuvable dans notre base de données",
    "ce compte a été fermé définitivement",
    "données utilisateur impossibles à récupérer",
    "aucun utilisateur de ce type sur nos serveurs",
    "la page est manquante ou a été retirée",
    "compte désactivé et non visible",
    "impossible de récupérer le profil demandé",
    "ce nom d'utilisateur n'est pas enregistré ou a été supprimé",
    "aucun résultat trouvé pour la requête utilisateur",
    "compte membre non disponible",
    "page indisponible - utilisateur introuvable",
    "ce contenu n'est plus disponible en raison de la suppression du compte",
    "le profil utilisateur a été archivé",
    "compte introuvable avec les détails fournis",
    "oups ! le profil n'existe pas",
    "nous n'avons pas pu trouver ce que vous cherchiez - utilisateur",
    "le compte a été purgé du système", "profil inaccessible pour le moment",
    "aucun utilisateur avec ce nom d'utilisateur n'existe",
    "la page demandée est introuvable ou supprimée",
    "compte supprimé pour violation", "ce profil n'a pas été trouvé",
    "la recherche n'a retourné aucun utilisateur correspondant",
    "l'utilisateur que vous essayez de voir n'existe pas",
    "compte introuvable - veuillez vérifier le nom d'utilisateur",
    "cette page a été supprimée par l'utilisateur",
    "aucun profil associé à ce compte",
    "le membre est introuvable sur la plateforme",
    "erreur 404 : profil utilisateur introuvable",
    "nous ne pouvons pas afficher ce profil",
    "le compte est invalide ou suspendu",
    "aucune donnée trouvée pour cet utilisateur",
    "utilisateur introuvable dans le système", "le profil a été retiré",

    # Turkish
    "kullanıcı bulunamadı", "sayfa bulunamadı", "hesap bulunamadı",
    "profil bulunamadı", "bu profil mevcut değil",
    "aradığın hesap mevcut değil", "böyle bir profil mevcut değil",
    "sayfa silindi veya mevcut değil", "hesap sahibi tarafından silindi",
    "bu kullanıcı platformda değil",
    "bu kullanıcı için eşleşen sonuç yok",
    "profil askıya alındı", "istenen hesap bulunamıyor",
    "404 - profil bulunamadı", "bu profili bulamadık",
    "bu hesap sonlandırıldı", "aramanla eşleşen kullanıcı bulunamadı",
    "üye kaldırıldı", "bu kullanıcı adı için sayfa bulunamadı",
    "hesap artık aktif değil", "bu profil mevcut değil",
    "bu isimde hesap bulunamadı", "kullanıcı platformdan yasaklandı",
    "bu profil için kayıt bulunamadı", "bu sayfa artık mevcut değil",
    "geçersiz veya mevcut olmayan kullanıcı",
    "hesap araması başarısız - kullanıcı bulunamadı",
    "istediğin profil silindi", "bu kullanıcı adıyla aktif hesap yok",
    "üzgünüz ama bu kullanıcı mevcut değil",
    "belirtilen kullanıcı bulunamıyor",
    "profil veritabanımızda bulunamadı",
    "bu hesap kalıcı olarak kapatıldı",
    "kullanıcı verileri alınamadı", "sunucularımızda böyle bir kullanıcı yok",
    "sayfa eksik veya kaldırıldı",
    "hesap devre dışı bırakıldı ve görüntülenemiyor",
    "istenen profil alınamadı",
    "bu kullanıcı adı kayıtlı değil veya silinmiş",
    "kullanıcı sorgusu için sonuç bulunamadı", "üye hesabı mevcut değil",
    "sayfa kullanılamıyor - kullanıcı bulunamadı",
    "bu içerik hesap silinmesi nedeniyle artık mevcut değil",
    "kullanıcı profili arşivlendi", "sağlanan bilgilerle hesap bulunamadı",
    "eyvah! profil mevcut değil", "aradığını bulamadık - kullanıcı",
    "hesap sistemden temizlendi", "profil şu anda erişilemiyor",
    "bu kullanıcı adıyla kullanıcı mevcut değil",
    "istenen sayfa bulunamadı veya silindi",
    "hesap ihlal nedeniyle silindi", "bu profil bulunamadı",
    "arama eşleşen kullanıcı döndürmedi",
    "görüntülemeye çalıştığın kullanıcı mevcut değil",
    "hesap bulunamadı - kullanıcı adını kontrol et",
    "bu sayfa kullanıcı tarafından silindi",
    "bu hesapla ilişkili profil yok", "üye platformda bulunamıyor",
    "404 hatası: kullanıcı profili bulunamadı",
    "bu profili görüntüleyemiyoruz",
    "hesap geçersiz veya askıya alındı",
    "bu kullanıcı için veri bulunamadı",
    "kullanıcı sistemده bulunamadı", "profil kaldırıldı",
]

# ---------------------------------------------------------------------------
# Title keywords — indicate a 404/error page
# ---------------------------------------------------------------------------
HARD_TITLE_404: tuple[str, ...] = (
    "404", "not found", "page not found",
    "не найден", "nicht gefunden", "introuvable",
    "bulunamadı", "不存在", "ошибка 404",
)

SOFT_TITLE_BAD: tuple[str, ...] = (
    "error", "login", "signin", "signup", "search",
    "ошибка", "войти", "авторизация", "регистрация",
)

# ---------------------------------------------------------------------------
# WAF / bot-protection markers — separate status: waf_blocked
# ---------------------------------------------------------------------------
WAF_MARKERS: tuple[str, ...] = (
    # Cloudflare
    "cloudflare", "cf-ray", "attention required",
    "enable javascript and cookies",
    "checking your browser", "just a moment",
    "ddos protection by cloudflare",
    # hCaptcha / reCAPTCHA
    "hcaptcha", "recaptcha", "please verify you are a human",
    "verify you are human", "i'm not a robot", "i am not a robot",
    # Imperva / Incapsula
    "incapsula", "imperva", "request unsuccessful",
    # Generic bot checks
    "security check", "bot check",
    "please complete the security check",
    "access denied", "403 forbidden", "you have been blocked",
    "your ip has been blocked", "suspicious activity",
)

# ---------------------------------------------------------------------------
# Login-wall markers — status: login_required
# ---------------------------------------------------------------------------
LOGIN_WALL_MARKERS: tuple[str, ...] = (
    # English
    "sign in to view", "log in to view", "login to view", "sign in to see",
    "log in to see", "you must be logged in", "please log in", "please sign in",
    "create an account to view", "register to view", "members only",
    "sign up to see", "join to view", "login required", "authentication required",
    # Russian
    "войдите чтобы просмотреть", "войдите, чтобы посмотреть",
    "войти для просмотра", "необходима авторизация",
    "зарегистрируйтесь чтобы просмотреть", "только для участников",
    "авторизуйтесь для просмотра", "требуется вход",
)

# ---------------------------------------------------------------------------
# JS / Meta redirect patterns
# ---------------------------------------------------------------------------
JS_REDIRECT_PATTERNS: tuple[re.Pattern, ...] = (
    re.compile(r'<meta[^>]+http-equiv=["\']refresh["\']', re.IGNORECASE),
    re.compile(r'window\.location\s*(?:\.href\s*)?=\s*["\']', re.IGNORECASE),
    re.compile(r'window\.location\.replace\s*\(', re.IGNORECASE),
    re.compile(r'window\.location\.assign\s*\(', re.IGNORECASE),
    re.compile(r'document\.location\s*(?:\.href\s*)?=\s*["\']', re.IGNORECASE),
)

# ---------------------------------------------------------------------------
# Misc
# ---------------------------------------------------------------------------
DEFAULT_UA = (
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
    "AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/124.0.0.0 Safari/537.36"
)

MIN_PROFILE_BODY_SIZE = 3_000
